import { Provide, Middleware } from '@midwayjs/decorator';
import { Context } from '@midwayjs/web'; // 使用 Web 模块的 Context

/**
 * 全局错误处理中间件
 * 捕获下游中间件或控制器抛出的异常
 */
@Provide()
@Middleware()
export class ErrorMiddleware {
  /**
   * resolve 方法返回实际中间件函数
   * ctx: 请求上下文
   * next: 调用下一个中间件
   */
  resolve() {
    return async (ctx: Context, next: () => Promise<any>) => {
      try {
        // 执行下一个中间件或控制器
        await next();
      } catch (err: any) {
        // 捕获异常，返回统一错误格式
        ctx.status = err.status || 500;
        ctx.body = {
          success: false,
          error: err.message || '服务器错误',
        };

        // 可以选择打印日志
        console.error('捕获全局异常:', err);
      }
    };
  }
}
